01. Welcome!

Welcome!

Welcome to the Data Structures and Algorithms Nanodegree program!

At its core, this program is about how to write code to solve problems and to do so efficiently.

You're probably well aware that computers can be used to solve all sorts of problems—from calculating the fastest route on a map, to sequencing the human genome. But there is almost always more than one way to solve a problem, and some ways can be dramatically more efficient than others. Two approaches may solve the same problem, but one may take milliseconds, while the other takes hours.

How do you look at a problem and identify different ways that you could solve it? And how do you know which approaches are more or less efficient? Will your solution run quickly or slowly? Will it take up a lot of space in the computer's memory, or only a little? Being able to answer these kinds of questions will make you a more effective developer—and also help you perform much better during technical interviews.

The key to mastering these skills is practice. Simply hearing about algorithms and data structures will not make you proficient at analyzing or implementing them in a real-world situation. For that reason, our goal in this program is not only to explain key concepts, but also to give you lots of chances to practice the key skills through hands-on exercises.

Overview

Here's a brief overview of what we'll cover in the program.

1. Welcome

In this section, we'll go over some important foundational topics. We'll review some basic Python concepts that you'll need, talk about how to solve problems, and then consider some of the fundamental ideas related to efficiency.

2. Data Structures

When you write code to solve a problem, there will always be data involved—and how you store or structure that data in the computer's memory can have a huge impact on what kinds of things you can do with it and how efficiently you can do those things. In this section, we'll explore different data structures, and consider the pros and cons of using different structures when solving different types of problems.

3. Basic Algorithms

To solve such problems, we need to come up with a very specific sequence of steps that will get us from whatever input we start with to the desired output. This kind of clear, highly specific procedure is called an algorithm. In this section, we'll get started with some elementary algorithms, such as binary search and mergesort.

4. Advanced Algorithms

In this final part of the program, we'll dive into some more advanced topics—including greedy algorithms, graph algorithms, dynamic programming, and linear programming.

Let's get started!